from clasesPrincipales.Instruccion import Instruccion
from clasesPrincipales.Kernel import Kernel
from clasesPrincipales.Programa import Programa
from memoriaFisica.asignacionContinua.AsignacionContinua import \
    AsignacionContinua
from memoriaFisica.asignacionContinua.MMU import MMU
from memoriaFisica.asignacionContinua.MejorAjuste import MejorAjuste
from planificacion.RR import RR

def mainAsignacionRR():
    # Programas e instrucciones
    prog = Programa('Google Chrome', [Instruccion(Instruccion.CPU, 1), 
                          Instruccion(Instruccion.IO, 1),
                          Instruccion(Instruccion.CPU, 1), 
                          Instruccion(Instruccion.IO, 3),
                          Instruccion(Instruccion.CPU, 5), 
                          Instruccion(Instruccion.EXIT)])
    prog1 = Programa('Eclipse', [Instruccion(Instruccion.IO, 5),
                           Instruccion(Instruccion.CPU, 2),
                           Instruccion(Instruccion.IO, 2),
                           Instruccion(Instruccion.EXIT)])
    prog2 = Programa ('Exit', [Instruccion(Instruccion.EXIT)])
    
    # Scheduler
    roundRobin = RR (3)
    # Ajuste
    mejorAjuste = MMU(AsignacionContinua(MejorAjuste()))
    # Kernel
    kernel = Kernel(roundRobin, mejorAjuste)
    print('******************************************')
    print('******** El Kernel ha iniciado!!! ********')
    print('******************************************')
    print(roundRobin)
    print ("El tipo de asignacion es: Mejor Ajuste")
        
    kernel.leerPrograma(prog)
    kernel.leerPrograma(prog1)
    kernel.leerPrograma(prog2)
    kernel.stop()
    print('******************************************')
    print('******** El Kernel ha finalizado! ********')
    print('******************************************')    
    
mainAsignacionRR ()